package cn.edu.sdjzu.knoverse.service;

import cn.edu.sdjzu.knoverse.model.dto.kg.CaseAuditDTO;
import cn.edu.sdjzu.knoverse.model.dto.kg.CaseDetailDTO;
import cn.edu.sdjzu.knoverse.model.dto.kg.CaseQueryDTO;
import cn.edu.sdjzu.knoverse.model.entity.kg.CaseNode;
import org.springframework.data.domain.Page;

import java.util.List;

/**
 * 案例节点服务接口
 */
public interface CaseService {
    
    /**
     * 分页查询案例
     * @param queryDTO 查询条件
     * @return 分页案例结果
     */
    Page<CaseNode> findCasesByConditions(CaseQueryDTO queryDTO);
    
    /**
     * 查询案例详情
     * @param id 案例ID
     * @return 案例实体
     */
    CaseNode findCaseById(String id);
    
    /**
     * 创建案例
     * @param caseNode 案例实体
     * @return 创建后的案例
     */
    CaseNode createCase(CaseNode caseNode);
    
    /**
     * 更新案例
     * @param id 案例ID
     * @param caseNode 更新内容
     * @return 更新后的案例
     */
    CaseNode updateCase(String id, CaseNode caseNode);
    
    /**
     * 删除案例
     * @param id 案例ID
     */
    void deleteCase(String id);
    
    /**
     * 获取所有案例类型
     * @return 类型列表
     */
    List<String> getAllCaseTypes();
    
    /**
     * 提交案例进行审核
     * @param id 案例ID
     */
    void submitCase(String id);
    
    /**
     * 发布案例
     * @param id 案例ID
     */
    void publishCase(String id);
    
    /**
     * 下架案例
     * @param id 案例ID
     */
    void unpublishCase(String id);
    
    /**
     * 审核案例
     * @param id 案例ID
     * @param auditDTO 审核数据
     */
    void auditCase(String id, CaseAuditDTO auditDTO);
    
    /**
     * 获取完整的案例详情（包含案例信息、组件列表、文件和知识点）
     * @param id 案例ID
     * @return 完整案例信息
     */
    CaseDetailDTO getCompleteCaseDetail(String id);
} 